package leetcode.双指针法;

/**
 * 删除排序数组中的重复项
 *
 * 核心思想：不要想着修改原始数组的长度，而是应该把不重复的元素放在最前面，然后返回新的数组长度 len
 *
 * 最终的结果是，数组中依然存在重复项，但是重复的全在后面，len之前的都是没有重复的
 */
public class Test26删除排序数组中的重复项 {

    public static int removeDuplicates(int[] nums) {
        // 因为数组是有序的，所以可以直接遍历比较大小
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (i != 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            // 如果当前元素和前一个不重复，则将当前元素覆写到原始数组上
            nums[index++] = nums[i];
        }
        // index既表示当前修改过的数组元素下标，又表示发现的重复的元素的个数
        return index;
    }

    public static void main(String[] args) {
//        int[] nums = {0,0,0,0,1,1,1,2,2,3,4,5,5};
        int[] nums = {0,1,1,2,2};
        int len = removeDuplicates(nums);
        for (int i = 0; i < len; i++) {
            System.out.print(nums[i]);
        }
    }

}
